﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using System.Text.RegularExpressions;
using System.Windows.Media.Imaging;


namespace DataAccessComponents
{
    /// <summary>
    /// Klasa odzwierciedlająca tabele "DodatkoweUslugie" w bazie danych
    /// </summary>
    public class DodatkoweUslugi : INotifyPropertyChanged, IDataErrorInfo
    {
        /// <summary>
        /// Id kraju
        /// </summary>
        private int id_uslugi;

        public int Id_uslugi
        {
            get { return this.id_uslugi; }
            set { this.id_uslugi = value; NotifyPropertyChanged("Id_uslugi"); }
        }

        /// <summary>
        /// Nazwa kraju
        /// </summary>
        private string nazwa;

        public string Nazwa
        {
            get { return this.nazwa; }
            set { this.nazwa = value; NotifyPropertyChanged("Nazwa"); }
        }

        /// <summary>
        /// Opis kraju
        /// </summary>
        private string opis;

        public string Opis
        {
            get { return opis; }
            set { opis = value; NotifyPropertyChanged("Opis"); }
        }

        /// <summary>
        /// Cena uslugi
        /// </summary>
        private Decimal cena;

        public Decimal Cena
        {
            get { return cena; }
            set { cena = value; }
        }

        private bool czy_w_cenie;

        public bool Czy_w_cenie
        {
            get { return czy_w_cenie; }
            set { czy_w_cenie = value; }
        }

        private bool zaznaczony;

        public bool Zaznaczony
        {
            get { return zaznaczony; }
            set { zaznaczony = value; NotifyPropertyChanged("Zaznaczony"); }
        }

        /// <summary>
        /// Konstruktor tworzący obiekt DodatkoweUslugi
        /// </summary>
        /// <param name="ik">Id uslugi</param>
        /// <param name="n">Nazwa uslugi</param>
        /// <param name="op">Opis uslugi</param>
        /// <param name="cen">Cena</param>
        public DodatkoweUslugi(int ik, string n, string op, decimal cen)
        {
            this.id_uslugi = ik;
            this.nazwa = n;
            this.opis = op;
            this.cena = cen;
            this.czy_w_cenie = false;
            this.zaznaczony = false;
            
        }

        public DodatkoweUslugi()
            : this(0, "", "", 0)
        { }

        #region INotifyPropertyChanged Members
        public event PropertyChangedEventHandler PropertyChanged;
        #endregion

        #region Private Helpers
        private void NotifyPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));

            }
        }
        #endregion

        public string Error
        {
            get { return string.Empty; }
        }

        public string this[string propertyName]
        {
            get
            {
                string results = string.Empty;
                propertyName = propertyName ?? string.Empty;

                if (propertyName == "Nazwa")
                {
                    if (string.IsNullOrEmpty(this.Nazwa))
                    {
                        results = "Pole \"Nazwa\" nie może być puste";
                    }
                    else if (Regex.IsMatch(this.Nazwa, @"[@£_^{}\[~\]|ÆæßÉ!¤%&'()\*\+,.:;<=>§?]+"))
                    {
                        results = "Pole \"Nazwa\" zawiera niedozwolone znaki";
                    }

                }
                else if (propertyName == "Cena")
                {
                    if (this.Cena < 0)
                    {
                        results = "Pole \"Cena\" nie może zawierać wartości ponieżej zera";
                    }
                }

                return results;
            }
        }
    }
}
